const nodeWs=require('nodejs-websocket')
const {connect} = require("nodejs-websocket");
function Login(params){//这里用构造函数解决新进入用户数据覆盖前边用数据的问题
   return  this.loginObj={
        name:params.name,
        img:params.img,
        enterOrMsg: params.enterOrMsg
    }
}
let loginInfo={}//用户登陆信息
let roomUsrs=[]//聊天室用户列表
const nodeWsConnect=nodeWs.createServer(function(connect){
    let usrInfo=new Login(loginInfo)
    // 告诉所有人新进入的成员
    if(loginInfo.enterOrMsg==='enter'){
        roomUsrs.push({name:usrInfo.name,img:usrInfo.img,enterOrMsg:usrInfo.enterOrMsg})
        broadcast({
            usr:usrInfo.name,
            img:usrInfo.img,
            msg:`${usrInfo.name}进入了聊天室`,
            time:new Date().toLocaleTimeString(),
            enterOrMsg:usrInfo.enterOrMsg,
            curAllUsrs:roomUsrs
        })
    }
    // 接收到浏览器发的数据
    connect.on('text',(data)=>{
        // 如果是登陆
        if(JSON.parse(data).enterOrMsg==='enter'){
            // 保存登录用户的信息
            loginInfo={
                name:JSON.parse(data).name,
                img:JSON.parse(data).img,
                enterOrMsg:JSON.parse(data).enterOrMsg
            }
        }
        // 如果是聊天
        if(JSON.parse(data).enterOrMsg==='msg'){
            broadcast({
                usr:usrInfo.name,
                msg:JSON.parse(data).msg,
                time:new Date().toLocaleTimeString(),
                enterOrMsg:JSON.parse(data).enterOrMsg,
                img:usrInfo.img
            })
        }

        console.log('新的连接成功了！')
    })
    // 连接关闭触发的事件
    connect.on('close',(data)=>{
        roomUsrs=roomUsrs.filter(item=>{return item.name !==usrInfo.name})
        broadcast({
            msg:`${usrInfo.name}离开了聊天室`,
            time:new Date().toLocaleTimeString(),
            enterOrMsg:'leave',
            curAllUsrs:roomUsrs
        })
    })
    // 连接异常触发的事件
    connect.on('error',(data)=>{
        console.log('有连接异常！')
    })
})
function broadcast(msg) {//广播，给所有用户发消息
    nodeWsConnect.connections.forEach(item=>{
        item.send(JSON.stringify(msg))
})
}
nodeWsConnect.listen(8081,()=>{
    console.log('新的连接成功了！')
})